var ElementMaxHeight = function() {
 this.initialize.apply(this, arguments);
}

ElementMaxHeight.prototype = {
 initialize: function(className) {
 this.elements = document.getElementsByClassName(className || 'maxheight');
 this.textElement = document.createElement('span');
 this.textElement.appendChild(document.createTextNode('A'));
 this.textElement.style.display = 'block';
 this.textElement.style.position = 'absolute';
 this.textElement.style.fontSize = '1em';
 this.textElement.style.top = '-1000px';
 this.textElement.style.left = '-1000px';
 document.body.appendChild(this.textElement);
 this.textElementHeight = document.getDimensions(this.textElement).height;
 var __object = this;
 var __checkFontSize = this.checkFontSize;
 this.checkFontSizeInterval = window.setInterval(function() {return __checkFontSize.apply(__object)}, 500);

 this.expand();

 // Refresh elements height onResize event
 var __expand = this.expand;
 if (window.addEventListener) {
 window.addEventListener('resize', function(event) {return __expand.apply(__object, [( event || window.event)])}, false);
 } else if (window.attachEvent) {
 window.attachEvent('onresize', function(event) {return __expand.apply(__object, [( event || window.event)])});
 }
 },

 expand: function() {
 this.reset();
 for (var i = 0; i < this.elements.length; i++) {
 this.elements[i].style.height = document.getDimensions(this.elements[i].parentNode).height + 'px';
 }
 },

 reset: function() {
 for (var i = 0; i < this.elements.length; i++) {
 this.elements[i].style.height = 'auto';
 }
 },

 checkFontSize: function() {
 var height = document.getDimensions(this.textElement).height;
 if(this.textElementHeight != height) {
 this.textElementHeight = height;
 this.expand();
 }
 }
}


if (!!document.evaluate) {
 document._getElementsByXPath = function(expression, parentElement) {
 var results = [];
 var query = document.evaluate(expression, parentElement || document,
 null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
 for (var i = 0, length = query.snapshotLength; i < length; i++)
 results.push(query.snapshotItem(i));
 return results;
 }
}

document.getElementsByClassName = function(className, parentElement) {
 if (!!document.evaluate) {
 var q = ".//*[contains(concat(' ', @class, ' '), ' " + className + " ')]";
 return document._getElementsByXPath(q, parentElement);
 } else {
 var children = (parentElement || document.body).getElementsByTagName('*');
 var elements = [], child;
 for (var i = 0, length = children.length; i < length; i++) {
 child = children[i];
 if (child.className.length != 0 &&
 (child.className == className ||
 child.className.match(new RegExp("(^|\\s)" + className + "(\\s|$)")))) {
 elements.push(child);
 }
 }
 return elements;
 }
}

document.getDimensions = function (element) {
 var display = element.style.display;
 if (display != 'none' && display != null) { // Safari bug
 return {width: element.offsetWidth, height: element.offsetHeight};
 }

 return {width: originalWidth, height: originalHeight};
}